<script>
	// 环信即时通讯
	import SDK from 'js_sdk/easemob-im-uni-app/Easemob-chat';
	// 实例化 SDK 对象
	const WebIM = wx.WebIM = SDK;

	export default {
		data() {
			return {
				isOpen: false, // WebSocket是否打开
				clientId: null, // 用户ID
				socketTimer: null, // 定时器
				firstShow: true, //是否为首次加载
			}
		},
		globalData() {
			chatSocket: null
			newChatInfo: null
			chatDetailNew: null
			conn: ''
		},
		onLaunch: function(options) {
			this.firstShow = true
			console.log('App Launch')
			let pid = ''
			if (options.query.state && options.query.state == '5') {
				pid = options.query.id * 1
			}
			// #ifdef MP-WEIXIN
			uni.login({
				provider: 'weixin',
				success: (res) => {
					this.$req.post('/user/userlogin', {
						code: res.code,
						pid: pid
					}).then(res => {
						uni.hideLoading()
						uni.setStorageSync('memberid', res.data.data.id)
						this.connectEasemob()
						if (res.data.data.phone == '') {
							this.$store.dispatch('actionsHandleIsLoginChange', false);
							this.$isResolve()
							// if (options.query.orderid) {
							// 	uni.navigateTo({
							// 		url: '/pages/log/log'
							// 	})
							// }
							this.getCode(options)
						} else {
							this.$req.post('/user/userinfo', {
								memberid: res.data.data.id
							}).then(res => {
								uni.setStorageSync('userinfo', res.data.data)
								uni.setStorageSync('uid', res.data.data.id)
								this.$store.dispatch('actionsHandleUserInfoChange', res
									.data.data);
								this.$store.dispatch('actionsHandleIsLoginChange',
									true);
								console.log('---登录完成=========---')
								this.$isResolve()
								this.getCode(options)
							})
						}
					})
				},
				fail: (err) => {
					console.log('登录失败', err)
				}
			})
			// #endif
			// #ifdef H5
			uni.setStorageSync('memberid', 471)
			this.connectEasemob()
			uni.request({
				url: 'https://zhongyi.weizi000.cn/user/userinfo',
				method: 'POST',
				data: {
					// uid: uni.getStorageSync('uid')
					memberid: uni.getStorageSync('memberid')
				},
				success: (res) => {
					uni.setStorageSync('userinfo', res.data.data)
					uni.setStorageSync('uid', res.data.data.id)
					this.$store.dispatch('actionsHandleUserInfoChange', res
						.data.data);
					this.$store.dispatch('actionsHandleIsLoginChange',
						true);
					this.$isResolve()

				}
			})
			// #endif
		},
		onShow: function(options) {
			console.log('App Show')
			if (uni.getStorageSync('memberid')) {
				// this.connectEasemob()
			}
			if (!this.firstShow) {
				this.getCode(options)
			}
			this.autoUpdate()
		},
		onHide: function() {
			console.log('App Hide')
		},
		methods: {
			autoUpdate() {
				const self = this
				// 获取小程序更新机制兼容
				if (uni.canIUse('getUpdateManager')) {
					const info = uni.getAccountInfoSync()
					const updateManager = uni.getUpdateManager()
					// 1. 检查小程序是否有新版本发布
					updateManager.onCheckForUpdate((res) => {
						// 请求完新版本信息的回调
						if (res.hasUpdate) {
							// 检测到新版本，需要更新，给出提示
							wx.showModal({
								title: '更新提示',
								content: '检测到新版本，是否下载新版本并重启小程序？',
								showCancel: false, // 隐藏取消按钮
								confirmText: '确定更新', // 只保留确定更新按钮
								success({
									confirm
								}) {
									if (confirm) {
										// 2. 用户确定下载更新小程序，小程序下载及更新静默进行
										self.downLoadAndUpdate(updateManager)
									}
								}
							})
						}
					})
				} else {
					// 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
					// uni.showModal({
					// 	title: '提示',
					// 	content: '当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。'
					// })
				}
			},
			/**
			 * 下载小程序新版本并重启应用
			 */
			downLoadAndUpdate: (updateManager) => {
				uni.showLoading()
				// 静默下载更新小程序新版本
				updateManager.onUpdateReady(() => {
					uni.hideLoading()
					// 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
					updateManager.applyUpdate()
				})
				updateManager.onUpdateFailed(() => {
					// 新的版本下载失败
					uni.showModal({
						title: '已经有新版本了哟~',
						content: '新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~',
					})
				})
			},


			getCode(options) {
				// console.log(options.query.state)
				// this.firstShow = false
				// if (options.query.state) {
				// 	uni.showLoading({
				// 		title: '加载中'
				// 	})
				// 	if (uni.getStorageSync('uid')) {
				// 		if (options.query.state == 1) {
				// 			if (uni.getStorageSync('uid') == 0) {
				// 				uni.navigateTo({
				// 					url: '/pages/editinfo/editinfo?state=' + options.query.state +
				// 						'&id=' + options.query.id * 1
				// 				})
				// 				return false
				// 			}
				// 			this.$req.post('/user/goodorderbd', {
				// 				id: options.query.id * 1,
				// 				userid: uni.getStorageSync('uid')
				// 			}).then(res => {
				// 				uni.hideLoading()
				// 				uni.navigateTo({
				// 					url: '/packageA/chatInfo/goods?id=' + options.query.id
				// 				})
				// 			})
				// 		} else if (options.query.state == 2) {
				// 			if (uni.getStorageSync('uid') == 0) {
				// 				uni.navigateTo({
				// 					url: '/pages/editinfo/editinfo?state=' + options.query.state +
				// 						'&id=' + options.query.id * 1
				// 				})
				// 				return false
				// 			}
				// 			this.$req.post('/user/yaofangxybd', {
				// 				id: options.query.id * 1,
				// 				userid: uni.getStorageSync('uid')
				// 			}).then(res => {
				// 				uni.hideLoading()
				// 				uni.navigateTo({
				// 					url: '/packageA/chatInfo/xiyao?type=xiyao&id=' +
				// 						res.data.data
				// 				})
				// 			})

				// 		} else if (options.query.state == 3) {
				// 			if (uni.getStorageSync('uid') == 0) {
				// 				uni.navigateTo({
				// 					url: '/pages/editinfo/editinfo?state=' + options.query.state +
				// 						'&id=' + options.query.id * 1
				// 				})
				// 				return false
				// 			}
				// 			this.$req.post('/user/patientadd', {
				// 				id: options.query.id * 1,
				// 				uid: uni.getStorageSync('uid')
				// 			}).then(res => {
				// 				uni.hideLoading()
				// 				uni.navigateTo({
				// 					url: '/pages/doctor/detail?id=' +
				// 						options.query.id * 1
				// 				})
				// 				// this.$req.post('/user/siyu', {
				// 				// 	id: options.query.id * 1,
				// 				// 	uid: uni.getStorageSync('uid')
				// 				// }).then(res => {})
				// 			})

				// 		}
				// 	} else {
				// 		uni.hideLoading()
				// 		uni.navigateTo({
				// 			url: '/pages/editinfo/editinfo?state=' + options.query.state + '&id=' + options.query
				// 				.id
				// 		})
				// 	}
				// }
			},
			// 初始化环信即时通讯
			connectEasemob(value) {
				this.globalData.conn = new WebIM.connection({
					appKey: '1175240726208200#zhongyi', //注意这里的 "K" 需大写
					// url: 'wss://zhongyi.weizi000.cn/chat/sChat/7', // websocket 连接地址
					url: 'wss://im-api-wechat.easemob.com/websocket',
					apiUrl: 'https://a1.easemob.com', // REST API 连接地址
					useOwnUploadFun: true // 是否使用自己的上传方式（如将图片文件等上传到自己的服务器，构建消息时只传 URL）
				});

				this.globalData.conn.addEventHandler("handlerId", {
					onConnected: () => {
						console.log("********onConnected");
					},
					// 自 4.8.0 版本，`onDisconnected` 事件新增断开原因回调参数, 告知用户触发 `onDisconnected` 的原因。
					onDisconnected: (e) => {
						console.log("*******onDisconnected", e.type);

					},
					onTokenWillExpire: () => {
						console.log("*****onTokenWillExpire");
					},
					onTokenExpired: () => {
						console.log("*****onTokenExpired");
					},
					onTextMessage: (msg) => {
						console.log("*****onTokenExpired========", msg);
						this.$store.dispatch('actionsHandleNewChatChange', msg);
					},
				});

				if (uni.getStorageSync('memberid')) {
					uni.request({
						url: 'https://zhongyi.weizi000.cn/chat/userToken',
						method: 'POST',
						data: {
							memberid: uni.getStorageSync('memberid')
						},
						success: (res) => {
							this.logEasemob(res.data.data)
						}
					})
				}
			},
			// 登录环信即时通讯
			logEasemob(token) {
				// 登录
				this.globalData.conn.open({
					user: uni.getStorageSync('memberid') + '',
					accessToken: token,
				}).then((res) => {
					console.log("========login success", res);
					// 登录状态
				}).catch((reason) => {
					console.log("=======login fail", reason);
				});
			},
			watch(methos, istr) { //方法；值
				let obj = this.globalData;
				let info = '';
				//Object.defineProperty()方法，会直接在一个对象上定义一个新属性，或者修改一个对象的现有属性， 并返回这个对象 Object.defineProperty(obj, istr, {
				Object.defineProperty(obj, istr, {
					// value:"hello", // 属性对应的值，默认为 undefined
					// writable:false, // 默认为 false，表示只读，无法给该属性赋值。在严格模式中，给只读属性赋值会报错。宽松模式中，给只读属性赋值不会生效
					enumerable: true, // 目标属性是否可以被枚举。true | false（使用for...in或Object.keys()）
					configurable: true, // 目标属性是否可以被删除或是否可以再次修改特性 true | false
					set: function(value) { //当设置值的时候触发的函数,设置的新值通过参数value拿到
						this._consumerGoodsStatus = value
						methos(value)
						info = value;
					},
					get: function(value) {
						return this._consumerGoodsStatus
					}
				});
			}
		}
	}
</script>

<style lang="scss">
	/* 注意要写在第一行，同时给style标签加入lang="scss"属性 */
	@import "@/uni_modules/uview-ui/index.scss";

	view {
		box-sizing: border-box;
	}

	.rowbox {
		display: flex;
		flex-direction: row;
		justify-content: center;
		align-items: center;
		box-sizing: border-box;
	}

	.columnbox {
		display: flex;
		flex-direction: column;
		justify-content: center;
		align-items: center;
		box-sizing: border-box;
	}

	.wdh-100 {
		width: 100%;
	}

	.spb {
		justify-content: space-between;
	}

	.jus {
		justify-content: flex-start;
	}

	.als {
		align-items: flex-start;
	}

	.def-col {
		color: #00b6b2;
	}

	.def-bgcol {
		background: #00b6b2;
	}


	.textovflow {
		text-overflow: ellipsis;
		white-space: nowrap;
		overflow: hidden;
	}

	.grey-btn {
		background: #c9ceca;
	}

	.bottom-box {
		position: fixed;
		bottom: 0;
		left: 0;
		z-index: 9;
		background: #fff;
		padding: 20rpx 40rpx;
		padding-bottom: 40px;
		box-shadow: inset 0px 2rpx 5rpx 0px rgba(169, 179, 190, 0.25);

	}

	.send-btn {
		background: #00b6b2;
		height: 82rpx;
		font-size: 28rpx;
		color: #FFFFFF;
		font-weight: bold;
		border-radius: 20rpx;
	}

	.content {
		font-family: PingFang SC;
	}
</style>